# -*- coding: utf-8 -*-
"""
初始化统计数据
为统计页面提供示例数据
"""

from app import app, db, User, PredictionHistory, SystemStats, KnowledgeArticle
import datetime
import random

def create_sample_users():
    """创建示例用户"""
    sample_users = [
        {'username': 'user001', 'email': 'user001@example.com', 'password': 'password123'},
        {'username': 'user002', 'email': 'user002@example.com', 'password': 'password123'},
        {'username': 'user003', 'email': 'user003@example.com', 'password': 'password123'},
        {'username': 'user004', 'email': 'user004@example.com', 'password': 'password123'},
        {'username': 'user005', 'email': 'user005@example.com', 'password': 'password123'},
        {'username': 'eco_lover', 'email': 'eco@example.com', 'password': 'password123'},
        {'username': 'green_life', 'email': 'green@example.com', 'password': 'password123'},
        {'username': 'recycle_pro', 'email': 'recycle@example.com', 'password': 'password123'},
    ]
    
    created_users = []
    for user_data in sample_users:
        existing_user = User.query.filter_by(username=user_data['username']).first()
        if not existing_user:
            user = User(
                username=user_data['username'],
                email=user_data['email'],
                created_at=datetime.datetime.now() - datetime.timedelta(days=random.randint(1, 30))
            )
            user.set_password(user_data['password'])
            db.session.add(user)
            created_users.append(user)
    
    db.session.commit()
    print(f"已创建 {len(created_users)} 个示例用户")
    return User.query.all()

def create_sample_predictions(users):
    """创建示例预测记录"""
    garbage_categories = ['可回收物', '有害垃圾', '湿垃圾', '干垃圾']
    
    predictions_count = 0
    
    # 为每个用户创建随机数量的预测记录
    for user in users:
        num_predictions = random.randint(5, 50)  # 每个用户5-50次预测
        
        for i in range(num_predictions):
            # 随机生成过去30天内的时间
            days_ago = random.randint(0, 30)
            hours_ago = random.randint(0, 23)
            minutes_ago = random.randint(0, 59)
            
            created_time = datetime.datetime.now() - datetime.timedelta(
                days=days_ago, hours=hours_ago, minutes=minutes_ago
            )
            
            prediction = PredictionHistory(
                user_id=user.id,
                image_path=f'uploads/sample_{user.id}_{i}.jpg',
                predicted_class=random.choice(garbage_categories),
                confidence=round(random.uniform(0.7, 0.99), 3),
                created_at=created_time
            )
            db.session.add(prediction)
            predictions_count += 1
    
    db.session.commit()
    print(f"已创建 {predictions_count} 条预测记录")

def create_system_stats():
    """创建系统统计数据"""
    # 获取用户和预测总数
    total_users = User.query.count()
    total_predictions = PredictionHistory.query.count()
    
    # 创建过去30天的系统统计数据
    for i in range(30):
        date = datetime.date.today() - datetime.timedelta(days=i)
        
        existing_stat = SystemStats.query.filter_by(date=date).first()
        if not existing_stat:
            # 模拟每日数据
            active_users = random.randint(1, min(total_users, 10))
            daily_predictions = random.randint(5, 50)
            new_users = random.randint(0, 3) if i < 7 else 0  # 最近一周有新用户
            popular_categories = ['可回收物', '有害垃圾', '湿垃圾', '干垃圾']
            
            stat = SystemStats(
                date=date,
                active_users=active_users,
                total_predictions=daily_predictions,
                new_users=new_users,
                popular_category=random.choice(popular_categories)
            )
            db.session.add(stat)
    
    db.session.commit()
    print("已创建系统统计数据")

def create_sample_articles():
    """创建示例科普文章"""
    # 获取管理员用户
    admin_user = User.query.filter_by(role='admin').first()
    if not admin_user:
        # 如果没有管理员，创建一个
        admin_user = User(
            username='admin',
            email='admin@example.com',
            role='admin',
            created_at=datetime.datetime.now() - datetime.timedelta(days=60)
        )
        admin_user.set_password('admin123')
        db.session.add(admin_user)
        db.session.commit()
        print("已创建管理员用户")
    
    articles = [
        {
            'title': '塑料瓶的正确回收方法',
            'content': '''塑料瓶是我们日常生活中最常见的可回收物之一。正确的回收方法包括：

1. **清洗干净**：倒空瓶内液体，用清水冲洗干净
2. **撕掉标签**：尽量撕掉塑料标签和胶带
3. **压扁处理**：将瓶子压扁，节省存储空间
4. **分类投放**：投入可回收物垃圾桶

注意：瓶盖通常是不同材质的塑料，建议分开处理。''',
            'category': '可回收物',
            'view_count': random.randint(50, 200)
        },
        {
            'title': '厨余垃圾处理小贴士',
            'content': '''厨余垃圾的正确处理对环境保护非常重要：

1. **沥干水分**：减少厨余垃圾的含水量
2. **去除包装**：食物包装袋不属于厨余垃圾
3. **适量投放**：避免一次性投放过多
4. **及时处理**：不要长时间存放，避免异味

家庭堆肥是处理厨余垃圾的好方法，既环保又能制作有机肥料。''',
            'category': '湿垃圾',
            'view_count': random.randint(30, 150)
        },
        {
            'title': '电池回收的重要性',
            'content': '''废旧电池属于有害垃圾，含有重金属等有害物质：

**危害：**
- 污染土壤和水源
- 影响植物生长
- 危害人体健康

**正确处理：**
1. 收集废旧电池
2. 投放到有害垃圾回收点
3. 不要随意丢弃
4. 选择可充电电池，减少废弃

一粒纽扣电池可以污染60万升水，相当于一个人一生的饮水量。''',
            'category': '有害垃圾',
            'view_count': random.randint(40, 180)
        },
        {
            'title': '纸张回收注意事项',
            'content': '''纸张是重要的可回收资源，但需要注意：

**可回收的纸张：**
- 报纸、杂志
- 办公用纸
- 纸箱、纸盒
- 图书、笔记本

**不可回收的纸张：**
- 卫生纸、餐巾纸
- 复写纸、蜡纸
- 塑料覆膜的纸张
- 严重污染的纸张

回收前请去除订书钉、胶带等杂质。''',
            'category': '可回收物',
            'view_count': random.randint(60, 220)
        }
    ]
    
    created_articles = 0
    for article_data in articles:
        existing_article = KnowledgeArticle.query.filter_by(title=article_data['title']).first()
        if not existing_article:
            article = KnowledgeArticle(
                title=article_data['title'],
                content=article_data['content'],
                category=article_data['category'],
                author_id=admin_user.id,
                view_count=article_data['view_count'],
                created_at=datetime.datetime.now() - datetime.timedelta(days=random.randint(1, 20))
            )
            db.session.add(article)
            created_articles += 1
    
    db.session.commit()
    print(f"已创建 {created_articles} 篇科普文章")

def main():
    """主函数"""
    with app.app_context():
        print("开始初始化统计数据...")
        
        # 创建所有表
        db.create_all()
        
        # 初始化数据
        users = create_sample_users()
        create_sample_predictions(users)
        create_system_stats()
        create_sample_articles()
        
        # 显示最终统计
        total_users = User.query.count()
        total_predictions = PredictionHistory.query.count()
        total_articles = KnowledgeArticle.query.count()
        
        print(f"\n=== 数据初始化完成 ===")
        print(f"总用户数: {total_users}")
        print(f"总预测次数: {total_predictions}")
        print(f"总文章数: {total_articles}")
        print(f"系统统计记录: {SystemStats.query.count()}")
        
if __name__ == '__main__':
    main()